﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApp1.IICMoudle
{
    public  static class HexStr
    {
        public static byte[] ToHexBytes(this string hexStr)
        {
            // 移除所有空格，确保只保留十六进制字符
            hexStr = hexStr.Replace(" ", "").Trim();

            // 校验长度是否为偶数（每个字节由2个十六进制字符组成）
            if (hexStr.Length % 2 != 0)
                throw new ArgumentException("十六进制字符串长度必须为偶数");

            // 校验是否包含无效字符
            foreach (char c in hexStr)
            {
                if (!IsHexChar(c))
                    throw new ArgumentException($"包含无效十六进制字符：{c}");
            }

            // 转换为字节数组
            byte[] bytes = new byte[hexStr.Length / 2];
            for (int i = 0; i < bytes.Length; i++)
            {
                string hexByte = hexStr.Substring(i * 2, 2); // 每次取2个字符
                bytes[i] = Convert.ToByte(hexByte, 16); // 16进制转字节
            }

            return bytes;
        }

        // 辅助方法：判断字符是否为有效的十六进制字符（0-9、A-F、a-f）
        private static bool IsHexChar(char c)
        {
            return (c >= '0' && c <= '9') ||
                   (c >= 'A' && c <= 'F') ||
                   (c >= 'a' && c <= 'f');
        }
    }
}
